package email

import (
	"PaperTrust/common"
	"fmt"
	"gopkg.in/gomail.v2"
	"log"
	"strconv"
)

// SendRegisterEmail 发送注册邮件
func SendRegisterEmail(themail string, number int) {
	subject := "欢迎注册 PaperFast 学术成果分享平台"
	mailTo := []string{themail}

	// 构建 HTML 格式的邮件正文
	body := `
	<html>
	<body style="font-family: Arial, sans-serif; background-color: #f4f4f4; padding: 20px;">
		<div style="max-width: 600px; margin: 0 auto; background: #ffffff; padding: 20px; border-radius: 8px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);">
			<h1 style="color: #333; text-align: center;">欢迎注册 PaperFast！</h1>
			<p style="color: #555; font-size: 16px; line-height: 1.6;">
				感谢您注册 PaperFast 学术成果分享平台！为了确保您的账户安全，请使用以下注册码完成注册流程：
			</p>
			<div style="text-align: center; margin: 20px 0;">
				<span style="font-size: 24px; font-weight: bold; color: #007BFF; background: #f0f8ff; padding: 10px 20px; border-radius: 8px;">` + strconv.Itoa(number) + `</span>
			</div>
			<p style="color: #555; font-size: 16px; line-height: 1.6;">
				请注意：
				<ul style="color: #555; font-size: 16px; line-height: 1.6; padding-left: 20px;">
					<li>注册码仅在本次注册过程中有效，请尽快使用。</li>
					<li>请勿将注册码分享给他人，以保护您的账户安全。</li>
				</ul>
			</p>
			<p style="color: #555; font-size: 16px; line-height: 1.6;">
				如果您在注册过程中遇到任何问题，请随时联系我们的客服团队，我们将竭诚为您服务。
			</p>
			<p style="color: #555; font-size: 16px; line-height: 1.6; text-align: center;">
				祝您使用愉快！<br>
				<strong>PaperFast 团队</strong>
			</p>
		</div>
	</body>
	</html>
	`
	err := SendMail(mailTo, subject, body)
	if err != nil {
		log.Println(err)
		fmt.Println("send fail")
		return
	}
	fmt.Println("sendRegisterEmail successfully")
}

// SendReplyEmail 发送回复邮件
func SendReplyEmail(themail string, paperID string) {
	subject := "您在 PaperTrust 学术成果分享平台的评论收到了一条回复"
	mailTo := []string{themail}

	// 构建 HTML 格式的邮件正文
	body := `
	<html>
	<body style="font-family: Arial, sans-serif; background-color: #f4f4f4; padding: 20px;">
		<div style="max-width: 600px; margin: 0 auto; background: #ffffff; padding: 20px; border-radius: 8px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);">
			<h1 style="color: #333; text-align: center;">您收到了一条回复！</h1>
			<p style="color: #555; font-size: 16px; line-height: 1.6;">
				您在 PaperTrust 学术成果分享平台的评论收到了一条回复，点击以下链接查看详情：
			</p>
			<div style="text-align: center; margin: 20px 0;">
				<a href="https://PaperTrust.matrix53.top/article?v=` + paperID + `" style="display: inline-block; padding: 10px 20px; background-color: #007BFF; color: #ffffff; text-decoration: none; border-radius: 8px; font-size: 16px;">查看回复</a>
			</div>
			<p style="color: #555; font-size: 16px; line-height: 1.6;">
				感谢您对 PaperTrust 的支持！
			</p>
			<p style="color: #555; font-size: 16px; line-height: 1.6; text-align: center;">
				祝您使用愉快！<br>
				<strong>PaperTrust 团队</strong>
			</p>
		</div>
	</body>
	</html>
	`

	err := SendMail(mailTo, subject, body)
	if err != nil {
		log.Println(err)
		fmt.Println("send fail")
		return
	}
	fmt.Println("sendReplyEmail successfully")
}

// SendMail 发送邮件
func SendMail(mailTo []string, subject string, body string) error {
	mailConn := map[string]string{
		"usercenter": common.EmailUser,
		"pass":       common.EmailPassword,
		"host":       common.EmailHost,
		"port":       common.EmailPort,
	}

	port, _ := strconv.Atoi(mailConn["port"]) //转换端口类型为int

	m := gomail.NewMessage()

	m.SetHeader("From", m.FormatAddress(mailConn["usercenter"], "PaperFast")) //添加别名
	m.SetHeader("To", mailTo...)                                              //发送给多个用户
	m.SetHeader("Subject", subject)                                           //设置邮件主题
	m.SetBody("text/html", body)                                              //设置邮件正文为 HTML 格式

	d := gomail.NewDialer(mailConn["host"], port, mailConn["usercenter"], mailConn["pass"])

	err := d.DialAndSend(m)
	return err
}
